home *** CD-ROM | disk | FTP | other *** search
/ Risc World 7 / Risc World 7.iso / Software / Issue4 / IYONIX / MANICMINER / SOURCE.ZIP / manicminer-1.6.3 / systems / riscos / c / ROSound < prev    next >
Encoding:
Text File  |  2006-09-08  |  2.9 KB  |  179 lines

  1. /* RISC OS sound support for Manic Miner */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "ROsound.h"
  6. #include "ROsupport.h"
  7.  
  8. /* ////////////////////////////////////////////////////////////
  9. //  Audio Stuff
  10. //////////////////////////////////////////////////////////// */
  11. /*#define  INGAMEpc  0x00 */
  12. /*#define  INGAMEspec  0x09 */
  13. /*#define  TITLEmusic  0x0d */
  14. /*#define  OPTIONSmusic  0x12 */
  15. /*#define  FINALcavern  0x16 */
  16. /*#define  ENDsequence  0x20 */
  17.  
  18. /*BYTE VOL=64; */
  19.  
  20. /*BYTE MUSICh; */
  21.  
  22. /*WORD volatile FrCt=0; */
  23.  
  24. /*void *wav=0, *die=0, *pick=0;*/
  25. /*MIDASsample *mod; */
  26. /*MIDASmodulePlayHandle  modon=0; */
  27.  
  28.  
  29. const char *
  30. loadSamples (void)
  31. {
  32.   long len;
  33.   int i;
  34.   long *p;
  35.   FILE *in;
  36.  
  37.   in = fopen ("<Manic$Dir>.mm-samp16", "rb");
  38.   if (!in)
  39.     return "Failed to load sample data";
  40.   fseek (in, 0, SEEK_END);
  41.   len = ftell (in);
  42.   fseek (in, 0, SEEK_SET);
  43.   p = malloc ((int) len);
  44.   if (!p)
  45.     return "Failed to load sample data";
  46.   i = fread (p, (int) len, 1, in);
  47.   fclose (in);
  48.   if (i != 1)
  49.     return "Failed to load sample data";
  50.  
  51.   for (i = 0; i < 4; ++i) {
  52.     if (p[0] >= 0) {
  53.       sampleptr[i].repeat = p[1];
  54.       sampleptr[i].ptr = p + 2;    /* 8 bytes on... */
  55.       sampleptr[i].end = p + (2 + p[0] / 4);
  56.       p += (p[0] + 11) / 4;    /* n+2 words :-) */
  57.     }
  58.     else {
  59.       int j = (int) (~*p++);    /* j<i */
  60.       sampleptr[i].repeat = sampleptr[j].repeat;
  61.       sampleptr[i].ptr = sampleptr[j].ptr;
  62.       sampleptr[i].end = sampleptr[j].end;
  63.     }
  64.   }
  65.   return 0;
  66. }
  67.  
  68. /* ////////////////////////////////////////////////////////////
  69. //  Play beep...
  70. //////////////////////////////////////////////////////////// */
  71.  
  72. #define CONV(p) ((p<<12)/samplefreq)
  73. #define LONG (4096)
  74.  
  75. static void
  76. Sound (unsigned int channel, int sample, int pitch /*Hz */ , int len /*cs */ )
  77. {
  78.   if (channel < 2) {
  79.     wavpitch[channel] = CONV (pitch);
  80.     wavsample[channel] = sample;
  81.     wavlen[channel] = len * samplefreq / 100;
  82.   }
  83. }
  84.  
  85.  
  86. void
  87. wavPitchBend (unsigned int channel, int pitch)
  88. {
  89.   if (channel < 2)
  90.     wavpitch[channel] = CONV (pitch);
  91. }
  92.  
  93.  
  94. void
  95. quiet (unsigned int channel)
  96. {
  97.   if (channel < 2)
  98.     wavpitch[channel] = 0;
  99. }
  100.  
  101.  
  102. void
  103. mm_snd_playmod (int patnum)
  104. {
  105.   switch (patnum) {
  106.   case 0:
  107.     musicPlay (0, 9, 0);
  108.     return;
  109.   case 9:
  110.     musicPlay (9, 13, 0);
  111.     return;
  112.   case 13:
  113.     musicPlay (13, 18, 1);
  114.     return;
  115.   case 18:
  116.     musicPlay (18, 22, 0);
  117.     return;
  118.   case 32:
  119.     musicPlay (32, 60, 0);
  120.     return;
  121.   default:
  122.     musicPause (0);
  123.   }
  124. }
  125.  
  126.  
  127. void
  128. mm_snd_update (void)
  129. {
  130. }
  131.  
  132.  
  133. void
  134. mm_snd_stopmod (void)
  135. {
  136.   musicPause (0);        /*musicPlay(17,**18,** 0); */
  137. }
  138.  
  139.  
  140. void
  141. mm_snd_jump (unsigned int rate)
  142. {
  143.   Sound (0, 0, rate, 2);
  144. }
  145.  
  146.  
  147. void
  148. mm_snd_jump2 (unsigned int rate)
  149. {
  150.   Sound (1, 0, rate, 2);
  151. }
  152.  
  153.  
  154. void
  155. mm_snd_die (unsigned int rate)
  156. {
  157.   Sound (1, 1, rate, LONG);
  158. }
  159.  
  160.  
  161. void
  162. mm_snd_pick (unsigned int rate)
  163. {
  164.   Sound (1, 2, rate, LONG);
  165. }
  166.  
  167.  
  168. void
  169. mm_snd_mute (void)
  170. {
  171.   musicPause (0);
  172. }
  173.  
  174. void
  175. mm_snd_unmute (void)
  176. {
  177.   musicPause (1);
  178. }
  179.